package ninth.利用Callable接口实现多线程;

import java.util.concurrent.Callable;

class MyThread implements Callable<String> {
    private int ticket = 5;

    @Override
    public String call() throws Exception {
        for (int i = 0; i < 100; i++) {
            if (ticket > 0) {
                System.out.println("卖票：ticket=" + ticket--);
            }
        }
        return "票都卖完了！";
    }
}

public class 定义一个线程主体类 {
}
/**
 * 当多线程的主体类定义完成之后，肯定要利用Thread类启动多线程，但遗憾的是在Thread类中并没有定义任何构造方法可以直接接受Callable接口对象实例，
 * 并且由于需要接受call()方法返回值的问题，所以从JDK1.5开始提供一个java.util.concurrent.FutureTask<V>类。
 * 定义如下：
 * public class FutureTask<V>  extends Object implements RunnableFuture<V>
 * 可以发现此类实现了RunnableFuture接口 而RunnableFuture又同时实现了Future和Runnable接口
 * 三种FutureTask类的常用方法，自己百度
 * 通过FutureTask类的继承结构可以发现其为Runnable接口的子类，并且FutureTask类可以接受Callable接口实例，这样依然可以利用Thread类来实现多线程的启动，
 * 而如果想要接收返回结果，则利用Future接口中的get()方法即可。
 */

